home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Caml Light 0.61 / Source / src / runtime / major_gc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-24  |  1.2 KB  |  56 lines  |  [TEXT/MPS ]

  1. #ifndef _major_gc_
  2. #define _major_gc_
  3.  
  4.  
  5. #include "freelist.h"
  6. #include "misc.h"
  7.  
  8. typedef struct {
  9.   asize_t size;
  10.   char *next;
  11. } heap_chunk_head;
  12.  
  13. extern free_list_t master_fl;
  14. extern int gc_phase;
  15. extern unsigned long allocated_words;
  16.  
  17. #define Phase_mark 0
  18. #define Phase_sweep 1
  19.  
  20. extern char *heap_start;
  21. extern char *heap_end;
  22. extern unsigned long total_heap_size;
  23. extern char *page_table;
  24. extern asize_t page_table_size;
  25. extern char *gc_sweep_hp;
  26.  
  27. #define In_heap 1
  28. #define Not_in_heap 0
  29. #ifndef SIXTEEN
  30. #define Page(p) (((addr) (p) - (addr) heap_start) >> Page_log)
  31. #define Is_in_heap(p) \
  32.   ((addr)(p) >= (addr)heap_start && (addr)(p) < (addr)heap_end \
  33.    && page_table [Page (p)] == In_heap)
  34. #else
  35. #define Page(p) \
  36.   (((unsigned long)(p) >> (16 + Page_log - 4)) + ((unsigned)(p) >> Page_log))
  37. #define Is_in_heap(p) (page_table [Page (p)] == In_heap)
  38. #endif
  39.  
  40. #ifdef ANSI
  41. extern void init_major_heap (asize_t);
  42. extern asize_t round_heap_chunk_size (asize_t);
  43. extern void darken (value);
  44. extern void major_collection_slice (void);
  45. extern unsigned long major_collection (void);
  46. #else
  47. void init_heap ();
  48. asize_t round_heap_chunk_size ();
  49. void darken ();
  50. void major_collection_slice ();
  51. unsigned long major_collection ();
  52. #endif
  53.  
  54.  
  55. #endif /* _major_gc_ */
  56.